﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Text.RegularExpressions;
using System.IO;

namespace ServerApp
{
   public class SendFileUDP
    {
        public string RecevieFileName()
        {
            string filename = "";

            //dùng để chuyển ký tự về chuổi
            ASCIIEncoding utf8 = new ASCIIEncoding();
            int Size = 1024;// ký thước để nhận dữ liệu
            int port = 8181; // port 
            //    MessageBox.Show("Server kết nối........");
            // tạo socket sữ dụng giao thức UPD
            IPEndPoint ipendp = new IPEndPoint(IPAddress.Any, port);
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
            ///  MessageBox.Show("Đã kết nối từ " + s.RemoteEndPoint);
            // tạo chỗ để chứa liệu để nhận 
            byte[] data = new byte[Size];
            //tạo ra một đối tượng chứa địa chỉ host và port
            IPEndPoint Address_Ip = new IPEndPoint(IPAddress.Any, port);
            // mở kết nối với địa chỉ host và ip
            s.Bind(ipendp);
            EndPoint remoteEP = Address_Ip;
            // lắng nghe client gởi giử liệu qua
            int BytesRecevied = s.Receive(data);// s.ReceiveFrom(data, ref remoteEP);
            // chuyển dữ liệu đã nhận từ dạng ký tự sang chuổi
            string chuoi = utf8.GetString(data);//System.Text.ASCIIEncoding.ASCII.GetString(data);
            string[] a = Regex.Split(chuoi, "\0");

            filename = a[0];
            s.Close();
            
            return filename;


        }
        public int ReceiveContentfileUDP(string filename)
        {
            int kq = 0;
            try
            {
                ASCIIEncoding utf8 = new ASCIIEncoding();
                int Size =1400;// ký thước để nhận dữ liệu
                int port = 8383; // port 
                String path = @"C:\Users\KimNhu\AppData\LocalLow\DATA\" + filename;
               // String path = @"d:\nhu.ppt";
                // MessageBox.Show("Server kết nối........");
                //IPEndPoint Address_Ip = new IPEndPoint(IPAddress.Any, port);
                //Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                //s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
                //EndPoint remoteEP = Address_Ip;


                // MessageBox.Show("Đã kết nối từ " + s.RemoteEndPoint);
                IPEndPoint ipendp = new IPEndPoint(IPAddress.Any, port);
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                s.Bind(ipendp);
                 EndPoint tmpRemote = (EndPoint)(ipendp);
                bool kt = false;
                FileStream fs = new FileStream(path, FileMode.Create);
              
                while (!kt)
                {
                   
                    byte[] data = new byte[Size];

                    for (int i = 0; i < data.Length; i++)
                    {
                        data[i] = 0;
                    }

                    // lắng nghe client gởi giử liệu qua
                    //int flag = s.ReceiveFrom(data, ref tmpRemote) ;
                    int flag = s.Receive(data);
                    if (flag < Size)
                    {
                        fs.Write(data, 0, flag);
                        kq++;
                        kt = true;
                    }
                    else
                    {
                        fs.Write(data, 0, data.Length);
                        kq++;
                    }
                    

                }
                s.Close();
                fs.Close();
          
            }
            catch (Exception e)
            {
                
                MessageBox.Show(e.ToString());
            }
           
            return kq;
        }
    }
   }
